package com.zleetcode.递归;

public class _B_汉诺塔 {
    public static void main(String[] args) {
        hanoi(2, "A", "B", "C");
    }

    /**
     * 将 n 个碟子从 a 挪动到 c
     *
     * @param b 中间的柱子，被借助的柱子
     */
    private static void hanoi(int n, String a, String b, String c) {
        if (n == 1) {
            move(1, a, c);
            return;
        }
        // 将n-1个盘子，从a借助于c移动到b
        hanoi(n - 1, a, c, b);
        // 将第n个盘子，从a直接移动到c
        move(n, a, c);
        // 将b中的n-1个盘子，从b借助于a移动到c
        hanoi(n - 1, b, a, c);
    }

    /**
     * 将 no 号盘子从 from 移动到 to
     *
     * @param no
     * @param from
     * @param to
     */
    private static void move(int no, String from, String to) {
        System.out.println("将" + no + "号盘子，从" + from + "移动到" + to);
    }
}
